spring--aop ProxyFactory图

AOP 思维导图

enter description here

"

ProxyFactory UML

如果看不懂UML 类图,没关系

enter description here

"
  • ProxyConfig:代理相关的全局配置,常见的有proxyTargetClass,exposeProxy。
  • AdvisedSupport:在Spring AOP中,Advisor(切面)就是将Advice(增强)和Pointcut(切入点)连接起来的东西。此类主要支持切面相关的操作。
  • ProxyCreatorSupport:代理创建的辅助类,主要方法就是创建代理对象。
  • AopProxy通过一个Factory工厂来创建,因为不同的外部配置决定了返回的是JDK代理还是CGLIB代理。这里涉及到两种设计模式,工厂模式和策略模式。从图中可以看出,AopProxyFactory->AopProxy->Prxoy之间的结构。

Advice UML

enter description here

"

JdkDynamicAopProxy时序图

enter description here

"

责任链

这个责任链部分,时序图不知道怎么画,所以贴了代码(ps:会的教教我)。更多责任链的实现方法,责任链3中实现方法案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//class ReflectiveMethodInvocation implements ProxyMethodInvocation
@Override
public Object proceed() throws Throwable {
// 如果是chain中最后一个所以,调用被代理的方法;interceptorsAndDynamicMethodMatchers就是责任链中的chain
if (this.currentInterceptorIndex == this.interceptorsAndDynamicMethodMatchers.size() - 1) {
// 其实就是反射(Mehtod.invoke)
return invokeJoinpoint();
}
//获取责任链中的第currentInterceptorIndex拦截器,并把索引加1
Object interceptorOrInterceptionAdvice =
this.interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);
....此处省略非重点.....
// 调用链中的一个拦截器
return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class AfterReturningAdviceInterceptor implements MethodInterceptor, AfterAdvice, Serializable {
private final AfterReturningAdvice advice;
.......

@Override
public Object invoke(MethodInvocation mi) throws Throwable {
//1. do something before if you want

//2.执行下一个拦截器
Object retVal = mi.proceed();

//3. do something after if you want
this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis());
return retVal;
}

}

参考

AOP 那点事儿(续集)